# 文件名：views.py
# 作者：系统自动生成
# 创建日期：2025-04-26
# 描述：学生管理应用的视图文件，处理学生信息、考勤、成绩等相关的请求和响应

from django.shortcuts import render, get_object_or_404
from rest_framework import viewsets, status, permissions
from rest_framework.response import Response
from rest_framework.decorators import action
from rest_framework.permissions import IsAuthenticated
from .models import Student, Attendance, Grade, LeaveApplication
from .serializers import StudentSerializer, AttendanceSerializer, GradeSerializer, LeaveApplicationSerializer
from django.contrib.auth import get_user_model
from django.utils import timezone
from datetime import timedelta

class StudentViewSet(viewsets.ModelViewSet):
    """
    学生信息视图集
    
    功能：
        - 提供学生信息的CRUD操作
        - 支持按学号、姓名、班级等字段过滤
    
    API端点：
        - GET /api/students/students/ - 获取学生列表
        - POST /api/students/students/ - 创建新学生
        - GET /api/students/students/{id}/ - 获取单个学生详情
        - PUT /api/students/students/{id}/ - 更新学生信息
        - PATCH /api/students/students/{id}/ - 部分更新学生信息
        - DELETE /api/students/students/{id}/ - 删除学生
    
    权限：
        - 需要认证用户
    
    查询参数：
        - student_id - 按学号过滤
        - name - 按姓名模糊搜索
        - class_id - 按班级ID过滤
        - campus_id - 按校区ID过滤
    
    响应格式：
        - 200 OK - 返回学生列表或详情
        - 201 Created - 学生创建成功
        - 400 Bad Request - 请求参数错误
        - 401 Unauthorized - 未认证
        - 403 Forbidden - 无权限
        - 404 Not Found - 学生不存在
    """
    queryset = Student.objects.all()
    serializer_class = StudentSerializer
    permission_classes = [permissions.IsAuthenticated]

class AttendanceViewSet(viewsets.ModelViewSet):
    """
    学生考勤视图集
    
    功能：
        - 提供考勤记录的CRUD操作
        - 支持按日期、学生、状态等字段过滤
    
    API端点：
        - GET /api/students/attendances/ - 获取考勤记录列表
        - POST /api/students/attendances/ - 创建新考勤记录
        - GET /api/students/attendances/{id}/ - 获取单个考勤记录详情
        - PUT /api/students/attendances/{id}/ - 更新考勤记录
        - PATCH /api/students/attendances/{id}/ - 部分更新考勤记录
        - DELETE /api/students/attendances/{id}/ - 删除考勤记录
    
    权限：
        - 需要认证用户
    
    查询参数：
        - student_id - 按学生ID过滤
        - date - 按日期过滤(格式:YYYY-MM-DD)
        - status - 按考勤状态过滤(present/absent/late/leave)
        - start_date - 按开始日期范围过滤
        - end_date - 按结束日期范围过滤
    
    响应格式：
        - 200 OK - 返回考勤记录列表或详情
        - 201 Created - 考勤记录创建成功
        - 400 Bad Request - 请求参数错误
        - 401 Unauthorized - 未认证
        - 403 Forbidden - 无权限
        - 404 Not Found - 考勤记录不存在
    """
    queryset = Attendance.objects.all()
    serializer_class = AttendanceSerializer
    permission_classes = [permissions.IsAuthenticated]

class GradeViewSet(viewsets.ModelViewSet):
    """
    学生成绩视图集
    
    功能：
        - 提供成绩记录的CRUD操作
        - 支持按课程、学期、学生等字段过滤
    
    API端点：
        - GET /api/students/grades/ - 获取成绩记录列表
        - POST /api/students/grades/ - 创建新成绩记录
        - GET /api/students/grades/{id}/ - 获取单个成绩详情
        - PUT /api/students/grades/{id}/ - 更新成绩记录
        - PATCH /api/students/grades/{id}/ - 部分更新成绩记录
        - DELETE /api/students/grades/{id}/ - 删除成绩记录
    
    权限：
        - 需要认证用户
    
    查询参数：
        - student_id - 按学生ID过滤
        - course_id - 按课程ID过滤
        - semester - 按学期过滤
        - min_score - 按最低分数过滤
        - max_score - 按最高分数过滤
        - exam_type - 按考试类型过滤(midterm/final/quiz)
    
    响应格式：
        - 200 OK - 返回成绩列表或详情
        - 201 Created - 成绩创建成功
        - 400 Bad Request - 请求参数错误
        - 401 Unauthorized - 未认证
        - 403 Forbidden - 无权限
        - 404 Not Found - 成绩记录不存在
    """
    queryset = Grade.objects.all()
    serializer_class = GradeSerializer
    permission_classes = [permissions.IsAuthenticated]

class LeaveApplicationViewSet(viewsets.ModelViewSet):
    """
    请假申请视图集
    
    功能：
        - 提供请假申请的CRUD操作
        - 支持按学生、请假状态、日期范围等字段过滤
    """
    queryset = LeaveApplication.objects.all()
    serializer_class = LeaveApplicationSerializer
    permission_classes = [permissions.IsAuthenticated]